// 中间件层 配置
package middlewares

import (
	"krm-backend/config"
	"krm-backend/utils/jwtutil"
	"krm-backend/utils/logs"

	"github.com/gin-gonic/gin"
)

func JwtAuth(r *gin.Context) {
	//1.除了login和logout之外的所有接口，都要验证请求是否携带token，并且token是否合法
	requestUrl := r.FullPath()
	logs.Debug(map[string]interface{}{"请求路径": requestUrl}, "")
	if requestUrl == "/api/auth/login" || requestUrl == "/api/auth/logout" {
		logs.Debug(map[string]interface{}{"请求路径": requestUrl}, "登录和退出不需要验证token")
		r.Next()
		return
	}
	returnData := config.NewReturnData()
	//其他接口需要验证token合法性
	tokenString := r.Request.Header.Get("Authorization")
	if tokenString == "" {
		//说明请求没有携带token
		returnData.Status = 401
		returnData.Message = "请求未携带token,请登录后尝试"
		r.JSON(200, returnData)
		r.Abort()
		return
	}
	//token不为空 要去验证token是否合法
	claims, err := jwtutil.ParseToken(tokenString)
	if err != nil {
		returnData.Status = 401
		returnData.Message = "Token验证未通过"
		r.JSON(200, returnData)
		r.Abort()
		return
	}
	//验证成功
	r.Set("claims", claims)
	r.Next()
}
